/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package utils.ftp;

import admin.Admin;
import controladores.ControladorConfigFTP;
import entidades.ConfigFTP;
import exceptions.ConfigFTPIncorrecta;
import java.io.IOException;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
import org.apache.commons.net.io.CopyStreamAdapter;

/**
 *
 * @author Felipe
 */
public abstract class FTPManager implements Runnable
{
    protected ConfigFTP config;
    protected FTPClient cliente;
    
    public FTPManager (CopyStreamAdapter listener) throws ConfigFTPIncorrecta
    {
        config = new ControladorConfigFTP().getConfigFTP();

        if (config == null)
            throw new ConfigFTPIncorrecta("Los datos de la conexión FTP no han sido completados.\nPuede hacerlo en la ventana de configuración.");

        cliente = new FTPClient();
        
        cliente.setCopyStreamListener(listener);
    }
    
    public boolean conectar () throws IOException
    {
        cliente.connect(config.getDireccion(), config.getPuerto());
        cliente.login(config.getUser(), config.getClave());
        
        int replyCode = cliente.getReplyCode();
        
        cliente.enterLocalPassiveMode();
        cliente.setFileType(FTP.BINARY_FILE_TYPE);
        
        if (!cliente.changeWorkingDirectory(config.getDirectorio()))
                cliente.makeDirectory(config.getDirectorio());
        
        return FTPReply.isPositiveCompletion(replyCode);
    }
    
    public ConfigFTP getConfigFTP ()
    {
        return config;
    }
}
